# coding: UTF-8
"""
每次给游戏添加新功能时，通常也将引入一些新设置。
下面来编写一个名为settings的模块，其中包含一个名为Settings的类，用于将所有设置存储在一个地方，以免在代码中到处添加设置。
这样，我们就能传递一个设置对象，而不是众多不同的设置。
另外，这让函数调用更简单，且在项目增大时修改游戏的外观更容易：
要修改游戏，只需修改settings.py中的一些值，而无需查找散布在文件中的不同设置。
"""
import ctypes


class Settings(object):
    """【类】存储游戏所有设置的类
    """
    screen_width: int
    screen_height: int

    def __init__(self):
        """【方法】初始化游戏的静态设置
        """
        # 屏幕设置
        # self.screen_width = 1200
        # self.screen_height = 800
        VAR_resolution = resolution_scaled()  # 获取屏幕分辨率（缩放后的分辨率）
        self.screen_width = VAR_resolution[0]
        self.screen_height = VAR_resolution[1]
        self.background_color = (208, 229, 247)  # 设置背景色
        # 飞船设置
        # self.ship_speed_factor = 1.5
        self.ship_number_limit = 3
        # 子弹设置
        self.bullet_width = 3
        self.bullet_height = 15
        self.bullet_color = (255, 100, 0)
        # self.bullet_speed_factor = 3
        self.bullet_allowed = 5  # 屏幕上允许存在的子弹数目
        self.bullet_volume = 3  # 连发一次的子弹数目（目前为弃用状态）
        # 导弹设置
        self.missile_speed_factor = 0.75  #（尚未开发）
        # 敌机设置
        # self.enemy_speed_factor = 1  # 敌机水平方向的速度系数
        self.enemy_vertical_speed = 10  # 敌机垂直方向的速度
        # self.enemy_direction_factor = 1  # 机群方向：1表示向右移，为-1表示向左移
        self.enemy_point = 50
        # 游戏节奏
        self.speedup_scale = 1.2
        self.score_scale = 1.5
        # 初始化动态属性
        self.init_dynamic_settings()

    def init_dynamic_settings(self) -> None:
        """【类方法】初始化动态属性
        """
        self.ship_speed_factor = 1.5        # 飞船的速度系数
        self.bullet_speed_factor = 3        # 子弹的速度系数
        self.enemy_speed_factor = 1         # 敌机水平方向的速度系数
        self.enemy_direction_factor = 1     # 机群方向：1表示向右移，为-1表示向左移
        return None

    def increase_speed(self) -> None:
        """【类方法】加快游戏速度
        """
        self.ship_speed_factor *= self.speedup_scale
        self.bullet_speed_factor *= self.speedup_scale
        self.enemy_speed_factor *= self.speedup_scale
        self.enemy_point = int(self.enemy_point * self.score_scale)
        return None


def resolution_scaled() -> tuple[int, int]:
    """【函 数】获取当前缩放比例下的显示宽度（width）与高度（height）
    """
    scaled_width = ctypes.windll.user32.GetSystemMetrics(0)
    scaled_height = ctypes.windll.user32.GetSystemMetrics(1)
    return (scaled_width, scaled_height)


def resolution_display() -> tuple[int, int]:
    """【函 数】获取显示器的真实宽度（width）与高度（height）
    """
    display_width = 0
    display_height = 0
    # 希望能不借助第三方库实现，但目前不行
    return (display_width, display_height)


if (__name__ == "__main__"):
    print("当前放大比例下的分辨率：", resolution_scaled())
